package com.xbh.Book.web;

import com.xbh.Book.pojo.Book;
import com.xbh.Book.pojo.Page;
import com.xbh.Book.service.BookService;
import com.xbh.Book.service.impl.BookServiceImpl;
import com.xbh.Book.utils.WebUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * @program: JavaWebExer
 * @description:
 * @author: 许宝华
 * @create: 2021-04-23 09:28
 */

public class BookServlet extends BaseServlet{
    private BookService bookService=new BookServiceImpl();
    /**
     * 添加图书
     * @param req
     * @param resp
     * @return void
     * @author 许宝华
     * @creed: Talk is cheap,show me the code
     * @date 2021/4/24 16:30
     */
    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int pageNo=WebUtils.parseInt(req.getParameter("pageNo"),0);
        pageNo+=1;
        //1、获取请求的参数==封装成为book对象
        Book book= WebUtils.copyParamToBean(req.getParameterMap(),new Book());
        //2、调用BookService.addBook保存图书
        bookService.addBook(book);
        //3、跳到图书列表页面
        //问题----->表单重复提交:当用户提交完请求，浏览器惠济路最后一次请求的全部信息，当用户按下功能键F5后，就会发起浏览器记录的最后一次请求
//        req.getRequestDispatcher("/");所以此时不可以使用请求转发，请求转发是一次请求
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=page&pageNo="+pageNo);
        /**
         * 2.那么一个完整的url地址，基本格式如下：
         * https://host:port/path?xxx=aaa&ooo=bbb
         * --http/https：这个是协议类型，如图中1所示
         * --host:服务器的IP地址或者域名，如图中2所示
         * --port:HTTP服务器的默认端口是80，这种情况下端口号可以省略。
         * 如果使用了别的端口，必须指明，例如：192.168.3.111:8080，这里的8080就是端口
         * --path:访问资源的路径,如图中3所示/s (图中3是把path和请求参数放一起了)
         * --？:url里面的？这个符号是个分割线，用来区分问号前面的是path，问号后面的是参数
         * --url-params:问号后面的是请求参数，格式：xxx=aaa，如图4区域就是请求参数
         * --&：多个参数用&符号连接
         */
    }
    /**
     * 删除图书
     * @param req
     * @param resp
     * @return void
     * @author 许宝华
     * @creed: Talk is cheap,show me the code
     * @date 2021/4/24 16:30
     */
    protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的参数
        int id = WebUtils.parseInt(req.getParameter("id"), 0);
        //调用bookService
        bookService.deleteBookById(id);
        //重定向返回图书管理页面
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=page&pageNo="+req.getParameter("pageNo"));

    }
    /**
     * 修改图书
     * @param req
     * @param resp
     * @return void
     * @author 许宝华
     * @creed: Talk is cheap,show me the code
     * @date 2021/4/24 16:30
     */
    protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的参数，封装成为book对象
        Book book = WebUtils.copyParamToBean(req.getParameterMap(), new Book());
        //调用bookService.updateBook(book)方法
        bookService.updateBook(book);
        //重定向回到图书管理页面
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=page&pageNo="+req.getParameter("pageNo"));

    }
    /**
     * 查询全部图书，把所有图书展示到jsp页面中
     * @param req
     * @param resp
     * @return void
     * @author 许宝华
     * @creed: Talk is cheap,show me the code
     * @date 2021/4/24 16:30
     */
    protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //通过bookService查询全部图书
        List<Book> books = bookService.queryBooks();
        //把全部图书保存到Request域中
        req.setAttribute("books",books);
        //请求转发到/pages/manager/book_manager.jsp
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }
    /**
     * 得到要修改的图书的信息
     * @param req
     * @param resp
     * @return void
     * @author 许宝华
     * @creed: Talk is cheap,show me the code
     * @date 2021/4/24 16:30
     */
    protected void getBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的参数
        int id = WebUtils.parseInt(req.getParameter("id"), 0);
        //调用bookService.queryById查询图书
        Book book = bookService.queryBookById(id);
        //保存到图书到request域中
        req.setAttribute("book",book);
        //请求转发到 pages/manager/book_edit.jsp页面
        req.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(req,resp);
    }
    /**
     * 处理分页功能
     * @param req
     * @param resp
     * @return void
     * @author 许宝华
     * @creed: Talk is cheap,show me the code
     * @date 2021/4/24 16:30
     */
    protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的参数pageNo和pageSize
        //第一次访问page， pageNo、pageSize为空，使用默认值
        int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1);
        int pageSize=WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);
        //调用bookService.page(pageNo,pageSize):page对象
        Page<Book> page=bookService.page(pageNo,pageSize);
        page.setUrl("manager/bookServlet?action=page");
        //保存Page对象到Request域中
        req.setAttribute("page",page);
        //请求转发到pages/manager/book_manager.jsp页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }

}
